index signature
object型を定義する際の[key: string]の記法
code:ts
type A = {
}
stringであれば何でも許容してしまう
更に悪いことに、返り値はnumber|undefinedではなく、全てnumberになる
[key: T]のTの部分に使える型は以下の4つのみ
string
number
symbol
例
code:ts
type A = {
[key: hoge${string}]: unknown;
};
リテラル型は使えない
code:ts
type A = {
};
これはindex signature使わずに{ 42: .., hoge: ..}で定義すれば良いだけなので、特に困ることはないmrsekut.icon
型変数は使えない
T extends stringの型制約があったとしても型変数は使えない
リテラル型も含んでしまうからか?
code:ts
type A<K extends string> = {
};
判定
Hoge[number]のようにしてアクセスできる
code:ts
type Tuple = {
};
type A = Tuplenumber; // 'a' | 'b' | 'c' | 'd' [x: stringと[x in string]の違い